﻿/**
* Загрузчик шрифтов из файлов с внедренными шрифтами
* @author firsoff maxim, email: firsoff_maxim@mail.ru, icq:235859730, tel:+79222345364
* @version 0.1/03.03.2008 10:22
*/

package ru.vega_int.firsoff.as3.utils
{
	import flash.display.DisplayObject;
	import flash.display.DisplayObjectContainer;
	import flash.display.LoaderInfo;
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.events.EventDispatcher;
	import flash.net.URLRequest;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.Font;
	import flash.events.*;
	import flash.utils.*;
	import ru.vega_int.firsoff.as3.utils.FontClass
	
	public class FontLoader extends Sprite
	{
		//	PROPERTIES
		private const _NAME:String = 'font_txt';	//	имя текстового поля с внедренным шрифтом
		private var _loader:Loader;					//	загрузчик
		private var _request:URLRequest;			//	запрос
		private var _movie:*;
		private var _fontClass:Class = FontClass;
		
		public var fontFile:String;					//	ссылка на файл с внедренным шрифтом
		public var format:TextFormat;		//	формат внедренного шрифта
		public var textField:TextField;				//	текстовое поле внедренного шрифта
		
		public static const FONT_INIT:String = 'font_init';	//	при получении и инициализации шрифта
		public static const FONT_ERROR:String = 'font_error';	//	при получении и инициализации шрифта
		//	------------------------------------------------------------------------------
		
		//	CONSTRUCTOR
		/**
		 * Конструктор
		 * @param	fontFile		//	ссылка на шрифт
		 * @param	documentClass	//	ссылка на Stage
		 */
		public function FontLoader(fontFile:String, _stage:Stage)
		{
			this.fontFile = fontFile;
			_stage.addChild(this);
			load();
			this.alpha = 0;
		};
		
		//	METHODS
		private function load() 
		{
			_loader = new Loader();
			_loader.contentLoaderInfo.addEventListener(Event.INIT, handleInitLoader);
			_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, handleErrorLoader);
			_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, handleProgress);
			_request = new URLRequest(fontFile);
			_loader.load(_request);
			addChild(_loader);
		};
		//	------------------------------------------------------------------------------
		
		//	GETTERS/SETTERS
		
		//	------------------------------------------------------------------------------
		
		//	HANDLERS
		/**
		 * Инициализация
		 * @param	e
		 */
		private function handleInitLoader(e:Event) :void
		{
			_movie = LoaderInfo(e.target).content;
			textField = _movie['fontContainer'][_NAME];
			
			
			//trace(textField)
			try 
			{
				format = textField.getTextFormat();	
				var _font:Object = _movie.getEmbedFont();
				trace(format.font)
				this.dispatchEvent(new Event(FontLoader.FONT_INIT));
			}
			catch (e:Error)
			{
				this.dispatchEvent(new Event(FontLoader.FONT_ERROR));
			};
		};
		
		/**
		 * Прогресс 
		 * @param	e
		 */
		private function handleProgress(e:ProgressEvent) :void
		{
			this.dispatchEvent(e);
		};
		
		/**
		 * Ошибка ввода вывода
		 * @param	e
		 */
		private function handleErrorLoader(e:IOErrorEvent) :void
		{
			this.dispatchEvent(e);
		};
		
		
		//	------------------------------------------------------------------------------
		
	};
};